In the field of software engineering, revision control is a practice that tracks and provides control over changes to collections of information such as source code, documentation, or configuration files. Within software engineering projects, development teams often leverage features of revision control systems to practice various forms of branching. Branching is a mechanism for isolation and parallel development of software applications. Several approaches to branching exist, including: branch per promotion, branch per task, branch per component, branch per technology, branch per release, branch per team, branch per feature, and develop the mainline.
Some approaches favor maximization of productivity, some favor minimization of risk, and others fall somewhere in between. Observing the drawbacks to any given approach results in inefficiencies in the development process that in turn lead to costly decreases in productivity, missed release deadlines, and other issues.